home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.31-14 / scripts / Makefile.build < prev    next >
Encoding:
Makefile  |  2009-09-09  |  11.8 KB  |  389 lines

  1. # ==========================================================================
  2. # Building
  3. # ==========================================================================
  4.  
  5. src := $(obj)
  6.  
  7. PHONY := __build
  8. __build:
  9.  
  10. # Init all relevant variables used in kbuild files so
  11. # 1) they have correct type
  12. # 2) they do not inherit any value from the environment
  13. obj-y :=
  14. obj-m :=
  15. lib-y :=
  16. lib-m :=
  17. always :=
  18. targets :=
  19. subdir-y :=
  20. subdir-m :=
  21. EXTRA_AFLAGS   :=
  22. EXTRA_CFLAGS   :=
  23. EXTRA_CPPFLAGS :=
  24. EXTRA_LDFLAGS  :=
  25. asflags-y  :=
  26. ccflags-y  :=
  27. cppflags-y :=
  28. ldflags-y  :=
  29.  
  30. subdir-asflags-y :=
  31. subdir-ccflags-y :=
  32.  
  33. # Read auto.conf if it exists, otherwise ignore
  34. -include include/config/auto.conf
  35.  
  36. include scripts/Kbuild.include
  37.  
  38. # For backward compatibility check that these variables do not change
  39. save-cflags := $(CFLAGS)
  40.  
  41. # The filename Kbuild has precedence over Makefile
  42. kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
  43. kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
  44. include $(kbuild-file)
  45.  
  46. # If the save-* variables changed error out
  47. ifeq ($(KBUILD_NOPEDANTIC),)
  48.         ifneq ("$(save-cflags)","$(CFLAGS)")
  49.                 $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS)
  50.         endif
  51. endif
  52. include scripts/Makefile.lib
  53.  
  54. ifdef host-progs
  55. ifneq ($(hostprogs-y),$(host-progs))
  56. $(warning kbuild: $(obj)/Makefile - Usage of host-progs is deprecated. Please replace with hostprogs-y!)
  57. hostprogs-y += $(host-progs)
  58. endif
  59. endif
  60.  
  61. # Do not include host rules unless needed
  62. ifneq ($(hostprogs-y)$(hostprogs-m),)
  63. include scripts/Makefile.host
  64. endif
  65.  
  66. ifneq ($(KBUILD_SRC),)
  67. # Create output directory if not already present
  68. _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
  69.  
  70. # Create directories for object files if directory does not exist
  71. # Needed when obj-y := dir/file.o syntax is used
  72. _dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
  73. endif
  74.  
  75. ifndef obj
  76. $(warning kbuild: Makefile.build is included improperly)
  77. endif
  78.  
  79. # ===========================================================================
  80.  
  81. ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),)
  82. lib-target := $(obj)/lib.a
  83. endif
  84.  
  85. ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(lib-target)),)
  86. builtin-target := $(obj)/built-in.o
  87. endif
  88.  
  89. modorder-target := $(obj)/modules.order
  90.  
  91. # We keep a list of all modules in $(MODVERDIR)
  92.  
  93. __build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
  94.      $(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \
  95.      $(subdir-ym) $(always)
  96.     @:
  97.  
  98. # Linus' kernel sanity checking tool
  99. ifneq ($(KBUILD_CHECKSRC),0)
  100.   ifeq ($(KBUILD_CHECKSRC),2)
  101.     quiet_cmd_force_checksrc = CHECK   $<
  102.           cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
  103.   else
  104.       quiet_cmd_checksrc     = CHECK   $<
  105.             cmd_checksrc     = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
  106.   endif
  107. endif
  108.  
  109. # Do section mismatch analysis for each module/built-in.o
  110. ifdef CONFIG_DEBUG_SECTION_MISMATCH
  111.   cmd_secanalysis = ; scripts/mod/modpost $@
  112. endif
  113.  
  114. # Compile C sources (.c)
  115. # ---------------------------------------------------------------------------
  116.  
  117. # Default is built-in, unless we know otherwise
  118. modkern_cflags = $(if $(part-of-module), $(CFLAGS_MODULE), $(CFLAGS_KERNEL))
  119. quiet_modtag := $(empty)   $(empty)
  120.  
  121. $(real-objs-m)        : part-of-module := y
  122. $(real-objs-m:.o=.i)  : part-of-module := y
  123. $(real-objs-m:.o=.s)  : part-of-module := y
  124. $(real-objs-m:.o=.lst): part-of-module := y
  125.  
  126. $(real-objs-m)        : quiet_modtag := [M]
  127. $(real-objs-m:.o=.i)  : quiet_modtag := [M]
  128. $(real-objs-m:.o=.s)  : quiet_modtag := [M]
  129. $(real-objs-m:.o=.lst): quiet_modtag := [M]
  130.  
  131. $(obj-m)              : quiet_modtag := [M]
  132.  
  133. # Default for not multi-part modules
  134. modname = $(basetarget)
  135.  
  136. $(multi-objs-m)         : modname = $(modname-multi)
  137. $(multi-objs-m:.o=.i)   : modname = $(modname-multi)
  138. $(multi-objs-m:.o=.s)   : modname = $(modname-multi)
  139. $(multi-objs-m:.o=.lst) : modname = $(modname-multi)
  140. $(multi-objs-y)         : modname = $(modname-multi)
  141. $(multi-objs-y:.o=.i)   : modname = $(modname-multi)
  142. $(multi-objs-y:.o=.s)   : modname = $(modname-multi)
  143. $(multi-objs-y:.o=.lst) : modname = $(modname-multi)
  144.  
  145. quiet_cmd_cc_s_c = CC $(quiet_modtag)  $@
  146. cmd_cc_s_c       = $(CC) $(c_flags) -fverbose-asm -S -o $@ $<
  147.  
  148. $(obj)/%.s: $(src)/%.c FORCE
  149.     $(call if_changed_dep,cc_s_c)
  150.  
  151. quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@
  152. cmd_cc_i_c       = $(CPP) $(c_flags)   -o $@ $<
  153.  
  154. $(obj)/%.i: $(src)/%.c FORCE
  155.     $(call if_changed_dep,cc_i_c)
  156.  
  157. cmd_gensymtypes =                                                           \
  158.     $(CPP) -D__GENKSYMS__ $(c_flags) $< |                                   \
  159.     $(GENKSYMS) -T $@ -a $(ARCH)                                            \
  160.      $(if $(KBUILD_PRESERVE),-p)                                            \
  161.      $(if $(1),-r $(firstword $(wildcard $(@:.symtypes=.symref) /dev/null)))
  162.  
  163. quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@
  164. cmd_cc_symtypes_c =                                                         \
  165.     set -e;                                                                 \
  166.     $(call cmd_gensymtypes, true) >/dev/null;                               \
  167.     test -s $@ || rm -f $@
  168.  
  169. $(obj)/%.symtypes : $(src)/%.c FORCE
  170.     $(call cmd,cc_symtypes_c)
  171.  
  172. # C (.c) files
  173. # The C file is compiled and updated dependency information is generated.
  174. # (See cmd_cc_o_c + relevant part of rule_cc_o_c)
  175.  
  176. quiet_cmd_cc_o_c = CC $(quiet_modtag)  $@
  177.  
  178. ifndef CONFIG_MODVERSIONS
  179. cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
  180.  
  181. else
  182. # When module versioning is enabled the following steps are executed:
  183. # o compile a .tmp_<file>.o from <file>.c
  184. # o if .tmp_<file>.o doesn't contain a __ksymtab version, i.e. does
  185. #   not export symbols, we just rename .tmp_<file>.o to <file>.o and
  186. #   are done.
  187. # o otherwise, we calculate symbol versions using the good old
  188. #   genksyms on the preprocessed source and postprocess them in a way
  189. #   that they are usable as a linker script
  190. # o generate <file>.o from .tmp_<file>.o using the linker to
  191. #   replace the unresolved symbols __crc_exported_symbol with
  192. #   the actual value of the checksum generated by genksyms
  193.  
  194. cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
  195. cmd_modversions =                            \
  196.     if $(OBJDUMP) -h $(@D)/.tmp_$(@F) | grep -q __ksymtab; then    \
  197.         $(call cmd_gensymtypes, $(KBUILD_SYMTYPES))        \
  198.             > $(@D)/.tmp_$(@F:.o=.ver);                \
  199.                                     \
  200.         $(LD) $(LDFLAGS) -r -o $@ $(@D)/.tmp_$(@F)         \
  201.             -T $(@D)/.tmp_$(@F:.o=.ver);            \
  202.         rm -f $(@D)/.tmp_$(@F) $(@D)/.tmp_$(@F:.o=.ver);    \
  203.     else                                \
  204.         mv -f $(@D)/.tmp_$(@F) $@;                \
  205.     fi;
  206. endif
  207.  
  208. ifdef CONFIG_FTRACE_MCOUNT_RECORD
  209. cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \
  210.     "$(if $(CONFIG_64BIT),64,32)" \
  211.     "$(OBJDUMP)" "$(OBJCOPY)" "$(CC)" "$(LD)" "$(NM)" "$(RM)" "$(MV)" \
  212.     "$(if $(part-of-module),1,0)" "$(@)";
  213. endif
  214.  
  215. define rule_cc_o_c
  216.     $(call echo-cmd,checksrc) $(cmd_checksrc)              \
  217.     $(call echo-cmd,cc_o_c) $(cmd_cc_o_c);                  \
  218.     $(cmd_modversions)                          \
  219.     $(cmd_record_mcount)                          \
  220.     scripts/basic/fixdep $(depfile) $@ '$(call make-cmd,cc_o_c)' >    \
  221.                                                   $(dot-target).tmp;  \
  222.     rm -f $(depfile);                          \
  223.     mv -f $(dot-target).tmp $(dot-target).cmd
  224. endef
  225.  
  226. # Built-in and composite module parts
  227. $(obj)/%.o: $(src)/%.c FORCE
  228.     $(call cmd,force_checksrc)
  229.     $(call if_changed_rule,cc_o_c)
  230.  
  231. # Single-part modules are special since we need to mark them in $(MODVERDIR)
  232.  
  233. $(single-used-m): $(obj)/%.o: $(src)/%.c FORCE
  234.     $(call cmd,force_checksrc)
  235.     $(call if_changed_rule,cc_o_c)
  236.     @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
  237.  
  238. quiet_cmd_cc_lst_c = MKLST   $@
  239.       cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
  240.              $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \
  241.                      System.map $(OBJDUMP) > $@
  242.  
  243. $(obj)/%.lst: $(src)/%.c FORCE
  244.     $(call if_changed_dep,cc_lst_c)
  245.  
  246. # Compile assembler sources (.S)
  247. # ---------------------------------------------------------------------------
  248.  
  249. modkern_aflags := $(AFLAGS_KERNEL)
  250.  
  251. $(real-objs-m)      : modkern_aflags := $(AFLAGS_MODULE)
  252. $(real-objs-m:.o=.s): modkern_aflags := $(AFLAGS_MODULE)
  253.  
  254. quiet_cmd_as_s_S = CPP $(quiet_modtag) $@
  255. cmd_as_s_S       = $(CPP) $(a_flags)   -o $@ $< 
  256.  
  257. $(obj)/%.s: $(src)/%.S FORCE
  258.     $(call if_changed_dep,as_s_S)
  259.  
  260. quiet_cmd_as_o_S = AS $(quiet_modtag)  $@
  261. cmd_as_o_S       = $(CC) $(a_flags) -c -o $@ $<
  262.  
  263. $(obj)/%.o: $(src)/%.S FORCE
  264.     $(call if_changed_dep,as_o_S)
  265.  
  266. targets += $(real-objs-y) $(real-objs-m) $(lib-y)
  267. targets += $(extra-y) $(MAKECMDGOALS) $(always)
  268.  
  269. # Linker scripts preprocessor (.lds.S -> .lds)
  270. # ---------------------------------------------------------------------------
  271. quiet_cmd_cpp_lds_S = LDS     $@
  272.       cmd_cpp_lds_S = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
  273.  
  274. $(obj)/%.lds: $(src)/%.lds.S FORCE
  275.     $(call if_changed_dep,cpp_lds_S)
  276.  
  277. # Build the compiled-in targets
  278. # ---------------------------------------------------------------------------
  279.  
  280. # To build objects in subdirs, we need to descend into the directories
  281. $(sort $(subdir-obj-y)): $(subdir-ym) ;
  282.  
  283. #
  284. # Rule to compile a set of .o files into one .o file
  285. #
  286. ifdef builtin-target
  287. quiet_cmd_link_o_target = LD      $@
  288. # If the list of objects to link is empty, just create an empty built-in.o
  289. cmd_link_o_target = $(if $(strip $(obj-y)),\
  290.               $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
  291.               $(cmd_secanalysis),\
  292.               rm -f $@; $(AR) rcs $@)
  293.  
  294. $(builtin-target): $(obj-y) FORCE
  295.     $(call if_changed,link_o_target)
  296.  
  297. targets += $(builtin-target)
  298. endif # builtin-target
  299.  
  300. #
  301. # Rule to create modules.order file
  302. #
  303. # Create commands to either record .ko file or cat modules.order from
  304. # a subdirectory
  305. modorder-cmds =                        \
  306.     $(foreach m, $(modorder),            \
  307.         $(if $(filter %/modules.order, $m),    \
  308.             cat $m;, echo kernel/$m;))
  309.  
  310. $(modorder-target): $(subdir-ym) FORCE
  311.     $(Q)(cat /dev/null; $(modorder-cmds)) > $@
  312.  
  313. #
  314. # Rule to compile a set of .o files into one .a file
  315. #
  316. ifdef lib-target
  317. quiet_cmd_link_l_target = AR      $@
  318. cmd_link_l_target = rm -f $@; $(AR) rcs $@ $(lib-y)
  319.  
  320. $(lib-target): $(lib-y) FORCE
  321.     $(call if_changed,link_l_target)
  322.  
  323. targets += $(lib-target)
  324. endif
  325.  
  326. #
  327. # Rule to link composite objects
  328. #
  329. #  Composite objects are specified in kbuild makefile as follows:
  330. #    <composite-object>-objs := <list of .o files>
  331. #  or
  332. #    <composite-object>-y    := <list of .o files>
  333. link_multi_deps =                     \
  334. $(filter $(addprefix $(obj)/,         \
  335. $($(subst $(obj)/,,$(@:.o=-objs)))    \
  336. $($(subst $(obj)/,,$(@:.o=-y)))), $^)
  337.  
  338. quiet_cmd_link_multi-y = LD      $@
  339. cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
  340.  
  341. quiet_cmd_link_multi-m = LD [M]  $@
  342. cmd_link_multi-m = $(cmd_link_multi-y)
  343.  
  344. # We would rather have a list of rules like
  345. #     foo.o: $(foo-objs)
  346. # but that's not so easy, so we rather make all composite objects depend
  347. # on the set of all their parts
  348. $(multi-used-y) : %.o: $(multi-objs-y) FORCE
  349.     $(call if_changed,link_multi-y)
  350.  
  351. $(multi-used-m) : %.o: $(multi-objs-m) FORCE
  352.     $(call if_changed,link_multi-m)
  353.     @{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
  354.  
  355. targets += $(multi-used-y) $(multi-used-m)
  356.  
  357.  
  358. # Descending
  359. # ---------------------------------------------------------------------------
  360.  
  361. PHONY += $(subdir-ym)
  362. $(subdir-ym):
  363.     $(Q)$(MAKE) $(build)=$@
  364.  
  365. # Add FORCE to the prequisites of a target to force it to be always rebuilt.
  366. # ---------------------------------------------------------------------------
  367.  
  368. PHONY += FORCE
  369.  
  370. FORCE:
  371.  
  372. # Read all saved command lines and dependencies for the $(targets) we
  373. # may be building above, using $(if_changed{,_dep}). As an
  374. # optimization, we don't need to read them if the target does not
  375. # exist, we will rebuild anyway in that case.
  376.  
  377. targets := $(wildcard $(sort $(targets)))
  378. cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
  379.  
  380. ifneq ($(cmd_files),)
  381.   include $(cmd_files)
  382. endif
  383.  
  384.  
  385. # Declare the contents of the .PHONY variable as phony.  We keep that
  386. # information in a variable se we can use it in if_changed and friends.
  387.  
  388. .PHONY: $(PHONY)
  389.